/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tida.servir.pages;

import com.tida.servir.base.GeneralPage;
import com.tida.servir.components.Envelope;
import com.tida.servir.entities.Usuario;
import com.tida.servir.entities.UsuarioTrabajador;
import helpers.Encriptacion;
import java.util.Date;
import org.apache.tapestry5.ajax.MultiZoneUpdate;
import org.apache.tapestry5.annotations.*;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.PageRenderLinkSource;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author ale
 */
//@IncludeStylesheet({"context:layout/trabajadornuevo.css"})
public class CambiarClavePrimera {

    @Inject
    private Session session;
    @InjectComponent
    private Zone zone;
    @InjectComponent
    private Zone mensajeZone;
    @InjectComponent
    private Envelope envelope;
//    @Property
//    @SessionState
//    private Usuario _usuario;
    @SessionState
    @Property
    private UsuarioTrabajador usuarioTrabajador;
    @Component(id = "formulariocambioclave")
    private Form formulariocambioclave;
    @Property
    private String oldPass;
    @Property
    private String newPass1;
    @Property
    private String newPass2;
    @Persist
    private boolean cambioForzado;
    private int elemento = 0;
    @Component(id = "formmensaje")
    private Form formmensaje;
    @Inject
    PageRenderLinkSource linkSource;

    public boolean isCambioForzado() {
        System.out.println("---> isCambioForzado: " + cambioForzado);
        return cambioForzado;
    }

    public void flagCambioForzado(String motivoDelCambioForzado) {
        System.out.println("---> flagCambioForzado: " + motivoDelCambioForzado);
        this.cambioForzado = true;
        formulariocambioclave.recordError(motivoDelCambioForzado);
    }

    public boolean getFormDisplay() {
        return envelope.getContents().length() == 0;
    }

    // fromulario principal
    @Log
    @CommitAfter
    Object onSuccessFromFormularioCambioClave() {
        Criteria criteriobusqueda;
        Usuario usuarioLocal;
        criteriobusqueda = session.createCriteria(Usuario.class);
        criteriobusqueda.add(Restrictions.eq("id", usuarioTrabajador.getId()));
        usuarioLocal = (Usuario) criteriobusqueda.list().get(0); // Guardamos la sesión
        if (elemento == 1) {
            return "CambiarClave";
        } else {
            if (!Encriptacion.MD5(oldPass).equals(usuarioLocal.getMd5Clave())) {
                formulariocambioclave.recordError("Clave actual ingresada incorrecta.");
                return zone.getBody();
            }

            if (oldPass.equals(newPass1)) {
                formulariocambioclave.recordError("La nueva clave debe ser diferente a la actual.");
                return zone.getBody();
            }

            if (!newPass1.equals(newPass2)) {
                formulariocambioclave.recordError("Las claves ingresadas deben ser iguales.");
                return zone.getBody();
            }

//        if(_usuario.getTrabajador()!=null){
            if (usuarioLocal.getNombres() != null) {
                if (usuarioLocal.getNombres().indexOf((newPass1.toUpperCase())) >= 0) {
                    formulariocambioclave.recordError("La claves ingresada contiene el nombre del usuario.");
                    return zone.getBody();
                }
            }
            if (usuarioLocal.getApellidoMaterno() != null) {
                if (usuarioLocal.getApellidoMaterno().indexOf((newPass1.toUpperCase())) >= 0) {
                    formulariocambioclave.recordError("La clave ingresada contiene el apellido materno del usuario.");
                    return zone.getBody();
                }
            }
            if (usuarioLocal.getApellidoMaterno() != null) {
                if (usuarioLocal.getApellidoPaterno().indexOf((newPass1.toUpperCase())) >= 0) {
                    formulariocambioclave.recordError("La clave ingresada contiene el apellido paterno del usuario.");
                    return zone.getBody();
                }
            }
            if (usuarioLocal.getLogin().indexOf(newPass1) >= 0) {
                formulariocambioclave.recordError("La clave ingresada contiene el login del usuario.");
                return zone.getBody();
            }

            envelope.setContents("Clave modificada con exito.");
            if (this.cambioForzado) {
                String sLinkEditarSolicitud = linkSource.createPageRenderLinkWithContext("index").toAbsoluteURI();
                envelope.setContents("Clave modificada con exito. <a href='" + sLinkEditarSolicitud + "'>Reingresar al sistema.</a>");
            }
            usuarioLocal.setMd5Clave(Encriptacion.MD5(newPass1));
            usuarioLocal.setUltimo_cambio_clave(new Date());
            usuarioLocal.setIntentos_fallidos(0L);
            session.saveOrUpdate(usuarioLocal);

            return new MultiZoneUpdate("zone", zone.getBody())
                    .add("mensajeZone", mensajeZone.getBody());
        }
    }

//    void onSelectedFromReset() {
//         elemento=1;
//    }
    @Log
    Object onCancel() {
        return "index";
    }
}
